/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package multiface.web.util.categories;

import java.util.List;
import multiface.awwadco.jpa.Categoria;

/**
 *
 * @author Diego64
 */
public interface AlberoCategorieInterface {

    /**
     * Carica e costruisce l'albero dal Database
     */
    public void caricaDaDB();

    /**
     * Ritorna La lista delle categoria per il livello specificato
     * @param level richiesto
     * @return Ritorna La lista delle categoria per il livello specificato
     * @throws Eccezione se il livello e' <0 oppure >h
     */
    public List<Categoria> categorieDaLivello(int level) throws Exception;

    /**
     * Ritorna la lista in ordine dalla root fino alle foglie
     * @return Lista delle string, 
     */
    public List<Categoria> categorieInOrdineDiProfondita();

    /**
     * Ritorna L'altezza dell'albero
     * @return 
     */
    public int altezza();

    /**
     * Tutti i figli della categoria padre
     * @param padre
     * @return Lista di categorie
     * @throws Exception 
     */
    public List<Categoria> getFigli(Categoria padre) throws Exception;
    
    
    public List<Categoria> getFratelli(Categoria cat);

    /**
     * 
     * @param padre
     * @return
     * @throws Exception 
     */
    public int numeroFigli(Categoria padre) throws Exception;

    /**
     * Ricerca della categoria nell'albero
     * @param Id
     * @return 
     */
    public Categoria cercaCategoria(int Id);

    /**
     * Sposta La categoria cat_in_int nella posizione "ordine" della categoria cat_to_int
     * @param cat_in_int
     * @param cat_to_int 
     * @param ordine 
     */
    public void spostaCategoriaInPosizione(int cat_in_int, int cat_to_int, int ordine);

     /**
     * Sposta La categoria cat_in_int nella posizione 0 della categoria cat_to_int
     * @param cat_in_int
     * @param cat_to_int 
     * @param ordine 
     */
    public void spostaCategoria(int cat_in_int, int cat_to_int);

    /**
     * Aggiunge La categeoria all'albero
     * @param c 
     */
    public void addCategoria(Categoria c);
}
